package com.bawei.base.utils

import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Observer
import java.util.concurrent.atomic.AtomicBoolean

class SingLiveData<T> : MutableLiveData<T>() {

    //定义一个全局变量，观察数据是不是最新请求的 AtomiccBoolean true 最新 false 旧
    //AtomicBoolean 具有原子性 ，可以保证的多线程情况下依然数据源正确且最新
    private var falg = AtomicBoolean(false)

    override fun observe(owner: LifecycleOwner, observer: Observer<in T>) {
        super.observe(owner){

            //判断数据是不是最新，对数据进行进行处理，并将其状态进行改变，变成不是最新的
            if (falg.compareAndSet(true,false)){
                observer.onChanged(it)
            }

        }

    }

    override fun postValue(value: T) {
        falg.set(true)
        super.postValue(value)
    }

}